

class PhysicsObject
{
	
	Vector3D pos, velocity, force;
	
	std::vector<ODN_Point*> points;
	
	virtual bool Update()
	{
		
		for (int p=0;p<points.size();p++) {
			
			//Add force to all particles evenly 
			points[i]->force += force / points.size();
			
			
			
		}
		
	}
	
};



class ODN_CharacterCarryableObject
{
	
	//Pointer to the character that is carrying the object
	//0 if not being carried 
	ODN_Character* parentcharacter;
	
};

class ODN_Bullet
{
	
	//Constants
	 Damage;
	 
	 ODN_Weapon* parentweapon;
	
};

class ODN_Weapon : ODN_CharacterCarryableObject 
{
	
	//Constants
	 ReloadTime;
	 AmmoCapacity;
	 
	
	enum eWeaponProperties {
		
		unsigned short MaxPrimaryAmmo;
		unsigned short MaxSecondaryAmmo;
		float PrimaryReloadRate;
		float SecondaryReloadRate;
		
	};
	
	unsigned short primaryammo;
	unsigned short secondaryammo;
	
	
};

class CBoomerangDiscAmmo : public ODN_Bullet 
{
	
	enum { Damage = 30; ReturningForce = 1.0; }
	
	virtual void Update()
	{
		
		//Call the base class update function 
		ODN_Bullet::Update();
		
		//Find a vector between the gun that fired the disc and the disc 
		Vector3D Between = this->pos - parentweapon->pos
		
		//Find the distance between the two 
		float Dist = Between.Length();
		
		//Add a force towards the gun proportional to 1 / r^2
		force += ReturningForce * Between / (Dist * Dist * Dist);
		
	}
	
	virtual void onCollideWith(ODN_SceneObject* object)
	{
		
		
		
		
	};
	
};

class CBoomerangDiscGun : public ODN_Weapon 
{
	
	//Max 3 ammo, must catch again to refire 
	
	//ReloadTime is time between shots 
	
	//Cannot catch other people's discs 
	
	enum { AmmoCapacity = 3; TimeBetweenShots = 1000; }
	
	
	
};
